package br.com.dallasmotopecas.venda.promocao.managerbean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.dallasmotopecas.comum.promocao.controller.PromocaoController;
import br.com.dallasmotopecas.comum.promocao.vo.PromocaoVo;
import br.com.dallasmotopecas.util.exception.ClasseNaoEncontradaException;
import br.com.dallasmotopecas.util.exception.ConexaoException;
import br.com.dallasmotopecas.util.exception.DirecionamentoPaginaException;
import br.com.dallasmotopecas.util.exception.ListarObjetoException;
import br.com.dallasmotopecas.util.managerbean.AbstractManagerBean;

@ManagedBean(name="promocaoManagerBean")
@ViewScoped
public class ManagerPromocaoBean extends AbstractManagerBean implements Serializable
{
	private static final long serialVersionUID = 1L;
	public List<PromocaoVo> listaPromocoes;
	public PromocaoVo promocaoVo;
	
	public ManagerPromocaoBean()
	{
		
	}
	
	@PostConstruct
	private void inicializar()
	{
		try
		{
			if (!isUsuarioLogado())
			{
				redirecionarPagina("/Index.jsf");
				return;
			}
			processaPermissaoUsuario(getUsuarioLogado());
			carregarPromocoes();
		}
		catch(DirecionamentoPaginaException e)
		{
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
	}
	
	@PreDestroy
	public void destroy()
	{
		getListaPromocoes().clear();
		setListaPromocoes(null);
		setPromocaoVo(null);
	}

	public List<PromocaoVo> getListaPromocoes()
	{
		if (listaPromocoes == null) listaPromocoes = new ArrayList<PromocaoVo>();
		
		return listaPromocoes;
	}

	public void setListaPromocoes(List<PromocaoVo> listaPromocoes)
	{
		this.listaPromocoes = listaPromocoes;
	}

	public PromocaoVo getPromocaoVo()
	{
		if (promocaoVo == null) promocaoVo = new PromocaoVo();
		
		return promocaoVo;
	}

	public void setPromocaoVo(PromocaoVo promocaoVo)
	{
		this.promocaoVo = promocaoVo;
	}
	
	public void carregarPromocoes()
	{
		PromocaoController promocaoController = null;
		try
		{
			promocaoController = new PromocaoController(getContexto());
			promocaoController.carregarListaPromocoesDataCorrente(getListaPromocoes());
		}
		catch(ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (promocaoController != null)
			{
				promocaoController.close();
				promocaoController = null;
			}
		}
	}
	
	public void carregarDetalhePromocao(PromocaoVo promocaoVo)
	{
		setPromocaoVo(promocaoVo);
		abrirModal("diagDetalhe");
	}
	
	public void sair()
	{
		try
		{
			redirecionarPagina("/view/venda/Home.jsf");
		}
		catch (DirecionamentoPaginaException e)
		{
			e.printStackTrace();
		}
	}
}
